#pragma once
#include <iostream>

#include <glm\glm.hpp>
#include <glm\gtc\matrix_transform.hpp>
#include <SFML/Window.hpp>

class Object
{
public:
	Object(char *);
	~Object(void);
	
	 char * GetName();
	 void virtual debugRender() = 0;
	 void virtual render(glm::mat4 ProjectionMatrix, glm::mat4 ViewMatrix) = 0;
	 void virtual renderToFrameBuffer() = 0;
	 glm::vec3 virtual getPosition() = 0;
	 void virtual setPosition(float x, float y, float z) = 0;
	 void addChild(Object* o);
	 Object* getChildByName(char * name);
	 void removeChild(Object* o);
	 int getChildCount();
	 int getRecursiveChildCount();

private:

protected:
	char * name;
	std::vector<Object*> children;
	Object* parent;

};

